#!/usr/bin/perl -w
use strict;
#Библиотека для опций командной строки
use Getopt::Std;
#Назначение  переменных на опции
our ($opt_w, $opt_s, $opt_d);
getopt('wsd');
# For  Debug Purpose
$opt_w='Russian';
$opt_s='c:\rtest.txt';
$opt_d='c:\ttest.txt';
#Проверка что опции присутвуют, если их нет то вылазит хелп
if (!$opt_w or  !$opt_s or !$opt_d) {

print "$0 -w Russian|Translit -s String \n";
print "-w Язык источника\n"; 
print "-s файл источника \n";
print "-d файл вывода \n";
exit;
}
#Если файлы одинаковые ругаемся
if ($opt_s eq $opt_d) { print "$opt_s и $opt_d одинаковые\n";
	exit;}
#Открываются файлы, на чтение "<" и запись ">".
open S_FILE, "<$opt_s" or die ("Невозможно открыть файл $opt_s для чтения");
open D_FILE, ">$opt_d" or die ("Невозможно открыть файл $opt_d для записи");

#проверяется опция с какого языка проверять
if ($opt_w =~ /Russian/) {
#Береться файл по строчно в цикле. 
while (<S_FILE>) {
	# Удаляются знаки конца строки
	chomp;
	# Выполняется процедура замены
	k82tr($_);
	#Выводиться в файл
	print D_FILE $_ . "\n";
	#берется след строчка и по новой.
 }
}

if ($opt_w =~ /Translit/) {
while (<S_FILE>) {
	chomp;
	tr2k8($_);
	print D_FILE $_ . "\n";
}

}

sub k82tr
    { ($_)=@_;
	

#
# Fonetic correct translit
#

s/Сх/S\'h/; s/сх/s\'h/; s/СХ/S\'H/;
s/Ш/Sh/g; s/ш/sh/g;

s/Сцх/Sc\'h/; s/сцх/sc\'h/; s/СЦХ/SC\'H/;
s/Щ/Sch/g; s/щ/sch/g;

s/Цх/C\'h/; s/цх/c\'h/; s/ЦХ/C\'H/;
s/Ч/Ch/g; s/ч/ch/g;

s/Йа/J\'a/; s/йа/j\'a/; s/ЙА/J\'A/;
s/Я/Ja/g; s/я/ja/g;

s/Йо/J\'o/; s/йо/j\'o/; s/ЙО/J\'O/;
s/Ё/Jo/g; s/ё/jo/g;

s/Йу/J\'u/; s/йу/j\'u/; s/ЙУ/J\'U/;
s/Ю/Ju/g; s/ю/ju/g;

s/Э/E\'/g; s/э/e\'/g;
s/Е/E/g; s/е/e/g;

s/Зх/Z\'h/g; s/зх/z\'h/g; s/ЗХ/Z\'H/g;
s/Ж/Zh/g; s/ж/zh/g;

tr/
абвгдзийклмнопрстуфхцъыьАБВГДЗИЙКЛМHОПРСТУФХЦЪЫЬ/
abvgdzijklmnoprstufhc\'y\'ABVGDZIJKLMNOPRSTUFHC\'Y\'/;

return $_;

}
sub tr2k8
    { ($_)=@_;

#
# Fonetic correct translit
#

s/E\'/Э/g; s/e\'/э/g;
s/E/Е/g; s/e/е/g;

s/Jo/Ё/g; s/jo/ё/g;
s/J\'o/Йо/g; s/j\'o/йо/g; s/J\'O/ЙО/g;

s/Sch/Щ/g; s/sch/щ/g;
s/Sc\'h/Сцх/g; s/sc\'h/сцх/g; s/SC\'H/СЦХ/g;

s/Ch/Ч/g; s/ch/ч/g;
s/C\'h/Цх/g; s/c\'h/цх/g; s/C\'H/ЦХ/g;

s/Sh/Ш/g; s/sh/ш/g;
s/S\'h/Сх/g; s/s\'h/сх/g; s/S\'H/СХ/g;

s/Ja/Я/g; s/ja/я/g;
s/J\'a/Йа/g; s/j\'a/йа/g; s/J\'A/ЙА/g;

s/Zh/Ж/g; s/zh/ж/g;
s/Z\'h/Зх/g; s/z\'h/зх/g; s/Z\'H/ЗХ/g;

s/Ju/Ю/g; s/ju/ю/g;
s/J\'u/Йу/g; s/j\'u/йу/g; s/J\'U/ЙУ/g;


tr/
abvgdzijklmnoprstufhc\'y\'ABVGDZIJKLMNOPRSTUFHC\'Y\'/
абвгдзийклмнопрстуфхцъыьАБВГДЗИЙКЛМHОПРСТУФХЦЪЫЬ/;

return $_;

}